package cn.tedu.reflect;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Tes6_Reflect {
    public static void main(String[] args) throws Exception {
        Class c = Reflect.class; //获取Class对象
//        method(c);//反射变量
        method2(c);//反射方法
        }
        //反射方法
        public static void method(Class c) throws Exception {
            Object o = c.newInstance();
            Field[] fe = c.getDeclaredFields();
            for (Field f : fe) {
                System.out.println(f.getName());
                System.out.println(f.getType().getName());
                f.setAccessible(true);
                if (f.getName().equals("name")) {
                    f.set(o, "rose");
                } else if(f.getName().equals("age")) {
                    f.set(o, 20);
                }
            }
        }
        //反射方法
       public static void method2(Class c) throws Exception {
           Method[] me = c.getDeclaredMethods();
           Object oo = c.newInstance();
           for(Method m:me){
               System.out.println(m.getName());
               m.setAccessible(true);
               if(m.getName().equals("show")){
                   m.invoke(oo,2,"jack");
               }else if(m.getName().equals("test")){
                   m.invoke(oo,5);
               }
           }
//           Method m1 = c.getDeclaredMethod("test",int.class);
//           Method m2 = c.getMethod("show");
//           m1.setAccessible(true);
//           m2.setAccessible(true);
//           m1.invoke(oo,5);
//           m2.invoke(oo,2,"好好的");
       }

}
